home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- * FileName..: LibFix.prg
- * Author....: Jerry Wightman
- * Compuserve: 71075,454 -or- 71545,1244
- * Teaks by..: Kevin S. Gallagher
- * Compuserve: 70034,2313
- * Usage info: See filename --> LibFix.doc
- * Compile...: LIBFIX /m/n
- * Linkers...: RTlink/Blinker/Warplink
- */
-
- #include "ksginc.h"
-
- STATIC aDisplay := { "|", "/", "-", "\" }
- STATIC aStat := {}
- STATIC CSTR := ""
- STATIC old_str := "CLIPPER501" // Both of these two strings
- STATIC new_str := "CLIPPER520" // most EQUAL in length!!!!!
- STATIC IS_CLOCK := .F.
-
- memvar getlist
-
- FUNCTION libfix( file1, file2 )
- local nHandleIn := 0 , ;
- nFileOut := 0 , ;
- nBytesIn := 0 , ;
- nBytesOut := 0 , ;
- nRow := 0 , ;
- cFileIn := "" , ;
- cFileOut := "" , ;
- cBuffer := "" , ;
- cStrLen := "" , ;
- nShow := 0 , ;
- nRetVal := 0 , ;
- nReport := 0 , ;
- oldcolor := ;
- SETCOLOR("W+/BG","N/BG")
-
- IF PCOUNT() > 0 .AND. UPPER( ALLTRIM( file1 ) ) $ CmdSpecs
- setcolor("BG+/B")
- //ƒƒƒƒƒ press any key but [ESC] erases the help from the console
- ZoomBox( 5,5,24,76,5,"W+/B",20,"ESC = leave help on screen")
- MoveUp(" This program can be used to replace all occurrences of one series ")
- MoveUp(" of characters or bytes with the contents of another series. ")
- MoveUp(" ")
- MoveUp(" This program is currently compiled to solve a problem with upgrading")
- MoveUp(" third party libraries from Clipper 5.01 to Clipper 5.2. ")
- MoveUp(" ")
- MoveUp(" The symbol CLIPPER501 in many libraries needs to be changed to ")
- MoveUp(" CLIPPER520. This can be accomplished using this program instead of ")
- MoveUp(" recompiling all of the libraries. ")
- MoveUp(" ")
- MoveUp(" I suggest first rename the old library with an extension of: *.L50 ")
- MoveUp(" The program will prompt for the file names for input and output. ")
- MoveUp(" ")
- MoveUp(" File names may also be entered on the command line as: ")
- MoveUp(" LIBFIX <Input file> <Output file> ")
- MoveUp(" Example: ")
- MoveUp(" LIBFIX NANFOR.L50 NANFOR.LIB ")
- MoveUp("")
- setcolor( oldcolor )
- @0,100 say ""
- nRetVal := KG_INKEY(0)
- IF nRetVal <> K_ESC
- InBox(30)
- ENDIF
- @0,0
- ByeBye(.F.)
- ENDIF
- SETCANCEL(.F.)
- SETKEY( ALTC, { |a,b,c| ByeBye( a,b,c ) } )
- ZoomBox( 0,0,MR,MC,8,"W+/B", 0,)
- ZoomBox( 2,1,11,77,4,"N/BG",20,"Press F5 For List of .LIB files",.T.,5)
-
- //ƒƒƒƒƒ install interrupt driven clock...
- #ifdef USE_CLOCK
- IF BK_TICKINS( 2,69 ) == 100
- IS_CLOCK := .T.
- ENDIF
- #endif
-
- @ 3,2 SAY PADC("Program to replace all occurrences",75) COLOR "GR+/BG"
- @ 4,2 SAY PADC(" of: " + old_str, 75) COLOR "GR+/BG"
- @ 5,2 SAY PADC("with: " + new_str, 75) COLOR "GR+/BG"
-
-
- @ 8,19 SAY " File to convert: "
- @10,19 SAY "Output file name: "
-
- IF PCOUNT() > 1 .AND. file( file1 ) .AND. !FILE( file2 )
- cFileIn := UPPER( PADR(file1,13 ) )
- cFileOut := UPPER( PADR(file2,13 ) )
- @ 8,36 SAY cFileIn COLOR "RB+/N,W/N"
- @10,36 SAY cFileOut COLOR "RB+/N,W/N"
- ELSE
- SET KEY K_F5 TO LIBFiles()
- cFileIn := space(13)
- cFileOut := space(13)
- ENDIF
-
- @ 8,36 GET cFileIn PICTURE "@!" VALID LIBFiles() COLOR "RB+/N,W/N"
- @10,36 GET cFileOut PICTURE "@!" COLOR "RB+/N,W/N"
- KsgRead()
-
- SET KEY K_F5 TO
-
- cFileIn := TRIM(cFileIn)
- cFileIn += IF( AT(".", cFileIn) == 0, ".LIB", "" )
-
- IF !FILE( cFileIn )
- setcolor( oldcolor )
- ByeBye()
- @MR-1,0 SAY PADR(ERRORMSG1,80)
- ENDIF
-
- cFileOut := TRIM(cFileOut)
- cFileOut += IF( AT(".", cFileOut) == 0, ".LIB", "" )
- IF LEN( cFileOut ) == 4 .AND. cFileOut == ".LIB"
- cFileOut := "51TO52.LIB"
- @10,13 SAY "Defaulting Output to..: "
- @10,36 SAY cFileOut COLOR "RB+/N"
- ENDIF
-
- IF( !GetYN("USE THESE SELECTIONS",,"W+/R","W+/R",.T.,.T.),ByeBye(), )
-
- IF FILE( cFileOut ) .AND. cFileOut == cFileIn
- TONE(4000,1)
- GetYN("DUPLICATE FILE NAME","[ QUIT ]",,,.T.,.F.)
- ByeBye()
- ELSEIF FILE( cFileOut ) .AND. cFileOut <> cFileIn
- IF GetYN(cFileOut+" Exist -> Overwrite file",,"W+/R","W+/R",.T.,.T.)
- IF FERASE( cFileOut ) == -1
- GetYN("ERROR ERASING"+cFileOut,"[ QUIT ]",,,.T.,.F.)
- ByeBye()
- ENDIF
- ELSE
- ByeBye()
- ENDIF
- ENDIF
-
- IF ( nHandleIn := FOPEN( cFileIn, 16 ) ) < 0
- GetYN("UNABLE TO OPEN ->"+cFileIn,"[ QUIT ]",,,.T.,.F.)
- ByeBye()
- ENDIF
-
- IF ( nFileOut := FCREATE( cFileOut ) ) < 0
- GetYN("ERROR CREATING ->"+cFileOut,"[ QUIT ]",,,.T.,.F.)
- FCLOSE(nHandleIn)
- ByeBye()
- ENDIF
-
- cStr := SUBSTR(old_str,1)
- cStrLen := LEN(cStr)
- cBuffer := space(1)
-
- FSEEK( nHandleIn , F_BOF )
-
- nBytesIn := 0
- nBytesIn := FREAD( nHandleIn, @cStr, cStrLen )
-
- IF nBytesIn < cStrLen
- EVAL( xBLOCK, nHandleIn,nFileOut,cFileOut )
- ENDIF
-
- nBytesOut := 0
-
- @ MR,0 say PADR(" WORKING ON "+ cFileIn+ " ",80) color "N/BG"
-
- nShow := 0
- #ifndef RollUm
- aStat := StatusNew( MR, 1 ,"W+/BG" )
- @MR,60 say "Found" color "GR+/BG"
- @MR,67 say "0" color "W+/BG"
- #endif
-
- WHILE nBytesIn > 0
- nBytesIn := FREAD( nHandleIn, @cBuffer, 1 )
- IF nBytesIn < 1
- nBytesOut := FWRITE( nFileOut, cStr, cStrLen)
- IF nBytesOut < cStrLen
- EVAL( xBLOCK, nHandleIn,nFileOut,cFileOut )
- ELSE
- InBox(10)
- InBox(10)
- @0,0 say PADR("SEE "+RPT_FILE+" FOR RESULTS",80) color "N/BG"
- ENDIF
- EXIT
- ENDIF
-
- nBytesOut := FWRITE( nFileOut, LEFT(cStr,1), 1)
- IF nBytesOut <> 1
- EVAL( xBLOCK, nHandleIn,nFileOut,cFileOut )
- ENDIF
-
- cStr := SUBSTR( cStr, 2, cStrLen-1) + cBuffer
-
- nRetVal := Check_It()
- nShow ++
-
- IF nShow > 63
- nShow := 0
- #ifndef RollUm
- StatusUpdate( aStat )
- #endif
- IF(inkey() == K_ESC,EVAL(xBLOCK,nHandleIn,nFileOut,cFileOut),NIL)
- ENDIF
- enddo
-
- FCLOSE(nHandleIn)
- FCLOSE(nFileOut)
-
- IF FILE( RPT_FILE )
- nFileOut := FOPEN( RPT_FILE, FO_READWRITE )
- FSEEK( nFileOut, 0, FS_END )
- ELSE
- nFileOut := FCREATE( RPT_FILE )
- IF FERROR() == 0
- FWriteLine( nFileOut,"" )
- FWriteLine( nFileOut,PADC("-=CONVERSION REPORT FILE=-",78))
- FWriteLine( nFileOut,"" )
- ENDIF
- ENDIF
- IF FERROR() == 0
- FWriteLine( nFileOut, "" )
- FWriteLine( nFileOut, REPLICATE(CHR(196),77) )
- FWriteLine( nFileOut, "" )
- FWriteLine( nFileOut, " Date : " + DTOC( date()))
- FWriteLine( nFileOut, " Original file : " + cFileIn )
- FWriteLine( nFileOut, " Output file : " + cFileOut )
- FWriteLine( nFileOut, " Search string : " + old_str )
- FWriteLine( nFileOut, "Replace string : " + new_str )
-
- IF nRetVal == 0
- FWriteLine( nFileOut, " Occurances : None" )
- ELSE
- FWriteLine( nFileOut, " Occurances : " +;
- ltrim( str( nRetVal );
- );
- )
- ENDIF
- FWriteLine( nFileOut, "" )
- ENDIF
- FCLOSE( nFileOut )
- //ƒƒƒƒƒ Make sure to remove the clock!
- ByeBye()
- RETURN NIL
-
- FUNCTION error_msg(a,b,c)
- FCLOSE ( a )
- FCLOSE ( b )
- FERASE ( c )
- dispbox(0,0,maxrow(),maxcol(),SPACE(9),"W/N")
- GetYN("FATAL ERROR CAN NOT CONTINUE","[ QUIT ]",,,.T.,.F.)
- ByeBye()
- RETURN (NIL)
-
-
- FUNCTION Check_It()
- STATIC nCount := 0
-
- IF cStr == old_str
-
- #ifndef TEST
- cStr := new_str
- #endif
-
- nCount ++
- #ifdef RollUm
- ? nCount
- ?? ": "
- ?? old_str
- ?? " --> "
- ?? new_str
- ?? " " ; ?
- #else
- @MR,67 say LTRIM(STR(nCount)) color "W+/BG"
- #endif
- ENDIF
-
- RETURN nCount
-
-
- /***
- *
- * Status.prg
- *
- * Implements a moving status indicator that can be used during
- * a batch process to indicate that the process is indeed underway
- *
- * Copyright (c) 1993, Computer Associates International Inc.
- * All rights reserved.
- *
- * NOTE: Compile with /n /w options
- *
- */
-
- ***
- *
- * StatusNew( [<nRow>], [<nCol>], [<oldcolor>] ) --> aStat
- *
- * Create a new Status array
- *
- */
- #ifndef RollUm
- FUNCTION StatusNew( nRow, nCol, oldcolor )
- LOCAL aStat[ ST_LEN ]
-
- aStat[ ST_ROW ] := 0
- aStat[ ST_COL ] := 0
- aStat[ ST_COLOR ] := "W+/N"
- aStat[ ST_CURRENT ] := 1
-
- IF nRow != NIL
- aStat[ ST_ROW ] := nRow
- ENDIF
-
- IF nCol != NIL
- aStat[ ST_COL ] := nCol
- ENDIF
-
- IF oldcolor != NIL
- aStat[ ST_COLOR ] := oldcolor
- ENDIF
- RETURN ( aStat )
-
- /***
- *
- * StatusUpdate( <aStat> ) --> NIL
- *
- * Update screen with new Status position
- *
- */
- FUNCTION StatusUpdate( aStat )
- LOCAL cOldColor
-
- cOldColor := SETCOLOR( aStat[ ST_COLOR ] )
-
- aStat[ ST_CURRENT ]++
- IF aStat[ ST_CURRENT ] > 4
- aStat[ ST_CURRENT ] := 1
- ENDIF
-
- @ aStat[ ST_ROW ], aStat[ ST_COL ] SAY aDisplay[aStat[ ST_CURRENT ]]
-
- SETCOLOR( cOldColor )
-
- RETURN ( NIL )
- #endif
-
- STATIC FUNCTION MoveUp( cText )
- local i, nDelay := 10000
- nDelay -= 9000
- scroll( 6, 6, 23, MAXCOL() -4, 1 )
- @ 23,06 say PADC( cText,70 )
- for i := 1 to ndelay
- next
- return nil
-
-
- FUNCTION LIBFiles
- local g := getactive() ,;
- aDir_ := {} ,;
- Files_ := {} ,;
- RetVal := .F. ,;
- nChoice := 0 ,;
- oldscrn := savescreen(9,28,18,53) ,;
- oldcolor := setcolor("W+/B,B/W")
-
- SET KEY K_F5 TO
- AEVAL( DIRECTORY("*.LIB"), { | x | AADD( aDir_,x[1] ) } )
- ASORT( aDir_ )
-
- IF LEN(aDir_) <> 0 .AND. EMPTY(RTRIM(g:VarGet())) .OR. LASTKEY() == K_F5
- AADD ( aDir_, "QUIT" )
- DISPBOX(9,28,17,51,"…Õ∏≥Ÿƒ”∫ ")
- @9,32 SAY "µSelect a fileΔ"
- KG_SHADOW(9,28,17,51)
- KEYBOARD CHR( 32 )
- INKEY(0)
- WHILE LASTKEY() <> K_ENTER
- nChoice:=ACHOICE(10,29,16,50, aDir_ )
- ENDDO
-
- IF nChoice == LEN( aDir_ )
- tone(25,1)
- ELSE
- g:varput( PADR(aDir_[nChoice],13) )
- RetVal :=.T.
- ENDIF
- ELSE
- RetVal := IF( FILE( g:VarGet() ),.T.,.F.)
- ENDIF
- SET KEY K_F5 TO LIBFiles()
-
- setcolor(oldcolor)
- restscreen(9,28,18,53,oldscrn)
- RETURN RetVal
-
- INIT FUNCTION HaHa
- //ƒƒƒƒƒ This type of function was undocumented in 5.1
- set( _SET_SCOREBOARD, .F. )
- set( _SET_CONFIRM , .T. )
- SETCURSOR( 0 )
- RETURN NIL
-
- FUNCTION ByeBye( lKill )
- DEFAULT lKill TO .T.
- IF IS_CLOCK
- #ifdef USE_CLOCK
- IF BK_TICKREM() <> 100
- //ƒƒƒƒƒ this message explains it well!
- ALERT("ERROR REMOVING CLOCK;INTERRUPTS ARE CORRUPTED;REBOOT!")
- ELSE
- //ƒƒƒƒƒ This beep signifies that the clock was removed OKay!
- TONE(4000,1)
- ENDIF
- #endif
- ENDIF
- IF lKill
- InBox(10)
- InBox(10)
- ENDIF
- QUIT
- RETURN NIL
-
-
- /*
- * ZoomBox( <nTopRow>,<nTopCol>,<nBotRow>,<nBotCol>,<nBoxType>,<cBoxColor>, ;
- * <nDrawBoxSpeed>, <cTopLineTitle>, <lShadow>, <nShadowColor> )
- *
- * This is a quicky on ZoomBox and InBox
- * Explode/Implode speed 1-100
- * Shadow colors 1-8
- *
- * EXAMPLE:
- * 1. draw a Novell type of backdrop
- * 2. Explode a shadow box
- * 3. wait for any key
- * 4. remove the box
- * 5. remove the backdrop
- *
- * -------------------------------------------------------------------------*
- * ZoomBox( 0,0,maxrow(),maxcol(),8,"W+/BG",50)
- * ZoomBox( 10,10,15,70,1,"W+/B",100,"Press a key to implode",.T.,7)
- * KG_INKEY(0)
- * InBox(100)
- * InBox()
- * -------------------------------------------------------------------------*
- *
- * There are 12 box types. Try 1-11 as shown above
- *
- * Number 12 example:
- *
- * #define THANDLE1 CHR(213)+CHR(214)
- * #define THANDLE2 CHR(215)
- *
- * FUNCTION TEST
- * SETMODE(25)
- * SETBLINK(.F.)
- * _BOXDEF()
- * // KG_CLS( <nColor>, <cString>)
- * // - cString max length is 18 ( a Clipper internal restriction )
- * KG_CLS( 79,"Clipper5 ")
- * ZoomBox( 3, 3, 20, 76, 12,"W+/B", 15, NIL, .T., 8 )
- * @3,3 SAY PADC("Norton Utils type of boxes",74) COLOR "N/W+*"
- * @3,3 SAY THANDLE1 COLOR "W+/N"
- * @3,5 SAY THANDLE2 COLOR "N/W+*"
- * KG_INKEY(0)
- * INBOX( 80 )
- * SETMODE( 25 )
- * CLS
- * RETURN NIL
- *
- */
-